package com.doit.sparksql.day01

import org.apache.log4j.{Level, Logger}
import org.apache.spark.sql.{DataFrame, SparkSession}

/**
 * @DATE 2022/1/13/15:29
 * @Author MDK
 * @Version 2021.2.2
 *
 * 先在普通表中插入数据
 * 后在分区表为中插入数据
 *    动态导入语法
 *        开启非严格模式
 *        开启动态分区
 *    静态导入语法
 * */
object SQL_Hive02 {
  Logger.getLogger("org").setLevel(Level.ERROR)
  def main(args: Array[String]): Unit = {
    System.setProperty("HADOOP_USER_NAME","root")
    val spark: SparkSession = SparkSession.builder()
      .appName("hive_02_write")
      .master("local[*]")
      .config("hive.metastore.uris","thrift://linux01:9083")  //元数据的位置信息
      .enableHiveSupport() //添加hive支持
      .getOrCreate()

    //加载数据
    val DataDF: DataFrame = spark.read.option("header", true).option("inferSchema", true).csv("sql_data/json/a.json")
    //写入hive
    DataDF.createTempView("data")

    /*
    * 在hive中建表
    * create table tb_user(id int, name string, age int, gender string, city string);
    * //直接使用SQL语句导入到 hive普通表中
    * */
    spark.sql(
      """
        |insert into table doit_02.tb_user
        |select * from data
        |""".stripMargin)

    //动态导入数据的两种方法  分区表
    //方法一
//    DataDF.selectExpr("id","name", "age","gender","city","'city' as city_name").show()
//    DataDF.write.partitionBy("city").saveAsTable("tb_user")
    //方法二
//    spark.sql(
//      """
//        |insert into table tb_user partition(city_name)
//        |select *, city as city_name from data
//        |""".stripMargin)

    spark.close()
  }
}
